home *** CD-ROM | disk | FTP | other *** search
/ Delphi 5 for Professionals / DELPHI5.iso / AddOns / Components / TEECHART / Src Code / IEDITCHA.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-10-24  |  15.2 KB  |  521 lines

  1. {**********************************************}
  2. {  TCustomChart (or derived) Editor Dialog     }
  3. {  Copyright (c) 1996-98 by David Berneda      }
  4. {**********************************************}
  5. {$I teedefs.inc}
  6. unit IEditCha;
  7. {$S-,W-,R-,P-,H+}
  8.  
  9. interface
  10.  
  11. uses
  12.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  13.   Forms, Chart, Buttons, AxMaxMin, AxisIncr, TeEngine, TeCanvas,
  14.   StdCtrls, ExtCtrls, ComCtrls, TeeFunci, TeeProcs, IEdiSeri, TeeLisB;
  15.  
  16. Const teeEditMainPage    =0;
  17.       teeEditGeneralPage =1;
  18.       teeEditAxisPage    =2;
  19.       teeEditTitlePage   =3;
  20.       teeEditLegendPage  =4;
  21.       teeEditPanelPage   =5;
  22.       teeEditPagingPage  =6;
  23.       teeEditWallsPage   =7;
  24.       teeEdit3DPage      =8;
  25.  
  26. type
  27.   TChartEditorOption=( ceAdd,
  28.                        ceDelete,
  29.                        ceChange,
  30.                        ceClone,
  31.                        ceDataSource,
  32.                        ceTitle,
  33.                        ceHelp  );
  34.  
  35. Const eoAll=[ ceAdd,
  36.               ceDelete,
  37.               ceChange,
  38.               ceClone,
  39.               ceDataSource,
  40.               ceTitle,
  41.               ceHelp ];
  42.  
  43. type
  44.   TChartEditorTab=( cetMain,
  45.                     cetGeneral,
  46.                     cetAxis,
  47.                     cetTitles,
  48.                     cetLegend,
  49.                     cetPanel,
  50.                     cetPaging,
  51.                     cetWalls,
  52.                     cet3D,
  53.                     cetSeriesGeneral,
  54.                     cetSeriesMarks
  55.                    );
  56.  
  57.   TChartEditorOptions=set of TChartEditorOption;
  58.   TChartEditorHiddenTabs=set of TChartEditorTab;
  59.  
  60.   TChartEditForm = class(TForm)
  61.     MainPage: TPageControl;
  62.     TabChart: TTabSheet;
  63.     Notebook1: TPageControl;
  64.     TabSeriesList: TTabSheet;
  65.     TabAxis: TTabSheet;
  66.     TabGeneral: TTabSheet;
  67.     TabTitle: TTabSheet;
  68.     TabLegend: TTabSheet;
  69.     TabPanel: TTabSheet;
  70.     TabPaging: TTabSheet;
  71.     TabWalls: TTabSheet;
  72.     BClose: TButton;
  73.     TabSeries: TTabSheet;
  74.     Header1: THeaderControl;
  75.     BMoveUP: TBitBtn;
  76.     BMoveDown: TBitBtn;
  77.     BAddSeries: TButton;
  78.     BDeleteSeries: TButton;
  79.     BRenameSeries: TButton;
  80.     BCloneSeries: TButton;
  81.     BChangeTypeSeries: TButton;
  82.     Tab3D: TTabSheet;
  83.     LBSeries: TChartListBox;
  84.     procedure FormShow(Sender: TObject);
  85.     procedure FormCreate(Sender: TObject);
  86.     procedure Notebook1Change(Sender: TObject);
  87.     procedure BCloseClick(Sender: TObject);
  88.     procedure MainPageChanging(Sender: TObject;
  89.       var AllowChange: Boolean);
  90.     procedure BMoveUPClick(Sender: TObject);
  91.     procedure BMoveDownClick(Sender: TObject);
  92.     procedure BAddSeriesClick(Sender: TObject);
  93.     procedure BDeleteSeriesClick(Sender: TObject);
  94.     procedure BRenameSeriesClick(Sender: TObject);
  95.     procedure BCloneSeriesClick(Sender: TObject);
  96.     procedure MainPageChange(Sender: TObject);
  97.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  98.     procedure LBSeriesEditSeries(Sender: TChartListBox; Index: Integer);
  99.     procedure LBSeriesOtherItemsChange(Sender: TObject);
  100.     procedure LBSeriesRefreshButtons(Sender: TObject);
  101.     procedure BChangeTypeSeriesClick(Sender: TObject);
  102.   private
  103.     { Private declarations }
  104.     {$IFDEF TEEHELPEDITOR}
  105.     Procedure HelpClick(Sender:TObject);
  106.     {$ENDIF}
  107.   protected
  108.     {$IFDEF TEEHELPEDITOR}
  109.     procedure WMHelp(var Message: TWMHelp); message WM_HELP;
  110.     {$ENDIF}
  111.   public
  112.     { Public declarations }
  113.     TheChart           : TCustomChart;
  114.     TheAxis            : TCustomChartAxis;
  115.     TheTitle           : TChartTitle;
  116.     TheWall            : TChartWall;
  117.     TheSeries          : TChartSeries;
  118.     TheEditSeries      : TChartSeries;
  119.     TheActivePageIndex : Integer;
  120.     TheHiddenTabs      : TChartEditorHiddenTabs;
  121.  
  122.     EditorOptions      : TChartEditorOptions;
  123.     IsDssGraph         : Boolean;
  124.     TheFormSeries      : TFormTeeSeries;
  125.     ButtonHelp         : TButton;
  126.     procedure SetTabSeries;
  127.     {$IFDEF TEEHELPEDITOR}
  128.     Procedure CheckHelpFile;
  129.     {$ENDIF}
  130.   end;
  131.  
  132. {$IFDEF TEEHELPEDITOR}
  133. Function GetTeeChartHelpFile:String;
  134. Function GetTeeChartUserHelpFile:String;
  135. {$ENDIF}
  136.  
  137. Type TOnCreateEditSeries=Procedure(Sender:TFormTeeSeries; AChart:TCustomChart) {$IFDEF TEEOCX}of object{$ENDIF};
  138. Var InternalOnCreateEditSeries:TOnCreateEditSeries;
  139.  
  140. implementation
  141.  
  142. {$R *.DFM}
  143.  
  144. uses Dialogs,PenDlg,TeeGally,TeeConst,Series,
  145.      IEdiAxis,IEdiLege,IEdiPane,IEdiTitl,IEdiWall,IEdiGene,IEdiPage,IEdi3D
  146.      {$IFDEF TEEHELPEDITOR}
  147.      ,Registry
  148.      {$ENDIF}
  149.      ;
  150.  
  151. { TChartEditForm }
  152. {$IFDEF TEEHELPEDITOR}
  153. Procedure TChartEditForm.CheckHelpFile;
  154. begin
  155.   if ceHelp in EditorOptions then
  156.   begin
  157.     if csDesigning in TheChart.ComponentState then
  158.        HelpFile:=GetTeeChartHelpFile
  159.     else
  160.        HelpFile:=GetTeeChartUserHelpFile;
  161.     if HelpFile<>'' then
  162.     begin
  163.       BorderIcons:=BorderIcons+[biHelp];
  164.       ButtonHelp:=TButton.Create(Self);
  165.       With ButtonHelp do
  166.       begin
  167.         Parent:=Self;
  168.         Left:=31;
  169.         Width:=BClose.Width;
  170.         Top:=BClose.Top;
  171.         Caption:=TeeMsg_HelpButton;
  172.         OnClick:=HelpClick;
  173.       end;
  174.     end;
  175.   end
  176.   else HelpFile:='';
  177. end;
  178. {$ENDIF}
  179.  
  180. procedure TChartEditForm.FormShow(Sender: TObject);
  181.  
  182.   Function GetEditingCaption(AChart:TCustomChart):String;
  183.   begin
  184.     FmtStr(result,TeeMsg_Editing,[AChart.Name]);
  185.   end;
  186.  
  187.   Procedure HideTabs;
  188.   begin
  189.     if cetMain in TheHiddenTabs then TabSeriesList.TabVisible:=False;
  190.     if cetGeneral in TheHiddenTabs then TabGeneral.TabVisible:=False;
  191.     if cetAxis in TheHiddenTabs then TabAxis.TabVisible:=False;
  192.     if cetTitles in TheHiddenTabs then TabTitle.TabVisible:=False;
  193.     if cetLegend in TheHiddenTabs then TabLegend.TabVisible:=False;
  194.     if cetPanel in TheHiddenTabs then TabPanel.TabVisible:=False;
  195.     if cetPaging in TheHiddenTabs then TabPaging.TabVisible:=False;
  196.     if cetWalls in TheHiddenTabs then TabWalls.TabVisible:=False;
  197.     if cet3D in TheHiddenTabs then Tab3D.TabVisible:=False;
  198.   end;
  199.  
  200. var t:Integer;
  201. begin
  202.   Screen.Cursor:=crDefault;
  203.   LBSeries.Chart:=TheChart;
  204.   With LBSeries.Sections do
  205.   begin
  206.     Clear;
  207.     for t:=0 to Header1.Sections.Count-1 do
  208.         AddSection(Header1.Sections[t].Width);
  209.   end;
  210.  
  211.   if Caption='' then Caption:=GetEditingCaption(TheChart);
  212.   HideTabs;
  213.  
  214.   if TheActivePageIndex<>-1 then
  215.   begin
  216.     if NoteBook1.Pages[TheActivePageIndex].TabVisible then
  217.     begin
  218.       Notebook1.ActivePage:=NoteBook1.Pages[TheActivePageIndex];
  219.       Notebook1Change(Self);
  220.     end;
  221.   end;
  222.  
  223.   LBSeries.FillSeries(TheEditSeries);
  224.   if Assigned(TheEditSeries) then LBSeriesEditSeries(LBSeries,0);
  225. end;
  226.  
  227. {$IFDEF TEEHELPEDITOR}
  228. Function GetRegistryHelpPath(Const HelpFile:String):String;
  229. begin
  230.   result:='';
  231.   With TRegistry.Create do
  232.   try
  233.     RootKey:=HKEY_LOCAL_MACHINE;
  234.     if OpenKey('SOFTWARE\Microsoft\Windows\Help',False) then
  235.        result:=ReadString(HelpFile)+'\'+HelpFile;
  236.   finally
  237.     Free;
  238.   end;
  239. end;
  240.  
  241. Function GetTeeChartHelpFile:String;
  242. begin
  243.   {$IFDEF TEEOCX}
  244.   result:=GetRegistryHelpPath('TeeChartX.hlp'); // <- do not translate
  245.   {$ELSE}
  246.   result:=GetRegistryHelpPath('TeeChart.hlp');  // <- do not translate
  247.   {$ENDIF}
  248. end;
  249.  
  250. Function GetTeeChartUserHelpFile:String;
  251. begin
  252.   {$IFDEF TEEOCX}
  253.   result:=GetRegistryHelpPath('TeeUserX.hlp'); // <- do not translate
  254.   {$ELSE}
  255.   result:=GetRegistryHelpPath('TeeUser.hlp');  // <- do not translate
  256.   {$ENDIF}
  257. end;
  258. {$ENDIF}
  259.  
  260. procedure TChartEditForm.FormCreate(Sender: TObject);
  261. begin
  262.   LBSeries.Chart:=TheChart;
  263.   Caption:='';
  264.   TheActivePageIndex:=-1;
  265.   EditorOptions:=[ceAdd,ceDelete,ceChange,ceClone,ceDataSource,ceTitle,ceHelp];
  266.   TheSeries    :=nil;
  267.   TheEditSeries:=nil;
  268.   TheChart     :=nil;
  269.   TheTitle     :=nil;
  270.  
  271.   IsDssGraph:=False;
  272.  
  273.   MainPage.ActivePage:=TabChart;
  274.   NoteBook1.ActivePage:=TabSeriesList;
  275.   {$IFDEF D3}
  276.   NoteBook1.HotTrack:=True;
  277.   {$ENDIF}
  278. end;
  279.  
  280. procedure TChartEditForm.Notebook1Change(Sender: TObject);
  281. var tmpForm   : TForm;
  282.     tmpSeries : TChartSeries;
  283. begin
  284.   With NoteBook1.ActivePage do
  285.   if ControlCount=0 then
  286.   begin
  287.     Case PageIndex of
  288.       teeEditGeneralPage: tmpForm:=TFormTeeGeneral.CreateChart(Self,TheChart);
  289.       teeEditAxisPage   : begin
  290.                             if TheAxis=nil then TheAxis:=TheChart.LeftAxis;
  291.                             tmpForm:=TFormTeeAxis.CreateAxis(Self,TheAxis);
  292.                           end;
  293.       teeEditTitlePage  : begin
  294.                             if TheTitle=nil then TheTitle:=TheChart.Title;
  295.                             tmpForm:=TFormTeeTitle.CreateTitle(Self,TheTitle);
  296.                           end;
  297.       teeEditLegendPage : tmpForm:=TFormTeeLegend.CreateLegend(Self,TheChart.Legend);
  298.       teeEditPanelPage  : tmpForm:=TFormTeePanel.CreateChart(Self,TheChart);
  299.       teeEditPagingPage : tmpForm:=TFormTeePage.CreateChart(Self,TheChart);
  300.       teeEditWallsPage  : begin
  301.                             if TheWall=nil then TheWall:=TheChart.LeftWall;
  302.                             tmpForm:=TFormTeeWall.CreateWall(Self,TheWall);
  303.                           end;
  304.     else
  305.        tmpForm:=TFormTee3D.CreateChart(Self,TheChart);
  306.     end;
  307.     tmpForm.Align:=alClient;
  308.     tmpForm.Parent:=NoteBook1.ActivePage;
  309.     tmpForm.Show;
  310.   end;
  311.   if NoteBook1.ActivePage=Tab3D then
  312.   begin
  313.     tmpSeries:=TheChart.GetASeries;
  314.     With TFormTee3D(Tab3D.Controls[0]) do
  315.     begin
  316.       AllowRotation:=TheChart.Canvas.SupportsFullRotation or
  317.                      (not Assigned(tmpSeries)) or
  318.                      (not (tmpSeries is TPieSeries));
  319.       CheckRotation;
  320.     end;
  321.   end;
  322. end;
  323.  
  324. procedure TChartEditForm.BCloseClick(Sender: TObject);
  325. begin
  326.   ModalResult:=mrCancel;
  327. end;
  328.  
  329. procedure TChartEditForm.MainPageChanging(Sender: TObject;
  330.   var AllowChange: Boolean);
  331. begin
  332.   if Assigned(TheFormSeries) then
  333.      TheFormSeries.PageSeriesChanging(Sender,AllowChange);
  334. end;
  335.  
  336. procedure TChartEditForm.BMoveUPClick(Sender: TObject);
  337. begin
  338.   LBSeries.MoveCurrentUp;
  339. end;
  340.  
  341. procedure TChartEditForm.BMoveDownClick(Sender: TObject);
  342. begin
  343.   LBSeries.MoveCurrentDown;
  344. end;
  345.  
  346. procedure TChartEditForm.BAddSeriesClick(Sender: TObject);
  347. var tmpSeries : TChartSeries;
  348. begin
  349.   tmpSeries:=LBSeries.AddSeriesGallery;
  350.   if Assigned(tmpSeries) then
  351.     if tmpSeries.FunctionType<>nil then
  352.     begin
  353.       TheSeries:=tmpSeries;
  354.       MainPage.ActivePage:=TabSeries;
  355.       SetTabSeries;
  356.       With TheFormSeries do
  357.       begin
  358.         PageSeries.ActivePage:=TabDataSource;
  359.         PageSeriesChange(Self);
  360.       end;
  361.     end;
  362. end;
  363.  
  364. procedure TChartEditForm.BDeleteSeriesClick(Sender: TObject);
  365. begin
  366.   LBSeries.DeleteSeries;
  367. end;
  368.  
  369. procedure TChartEditForm.BRenameSeriesClick(Sender: TObject);
  370. begin
  371.   LBSeries.RenameSeries;
  372.   Self.ActiveControl:=LBSeries;
  373. end;
  374.  
  375. procedure TChartEditForm.BCloneSeriesClick(Sender: TObject);
  376. begin
  377.   LBSeries.CloneSeries;
  378. end;
  379.  
  380. procedure TChartEditForm.SetTabSeries;
  381. begin
  382.   if Assigned(TheFormSeries) then
  383.      TheFormSeries.TheSeries:=LBSeries.SelectedSeries
  384.   else
  385.   begin
  386.     TheFormSeries:=TFormTeeSeries.Create(Self);
  387.     With TheFormSeries do
  388.     begin
  389.       Self.LBSeries.OtherItems:=CBSeries.Items;
  390.       Parent:=TabSeries;
  391.       {$IFDEF D2C1}
  392.       SetBounds(Left,Top,TabSeries.ClientWidth,TabSeries.ClientHeight);
  393.       {$ENDIF}
  394.       ShowTabDataSource:=ceDataSource in EditorOptions;
  395.       ShowTabGeneral:=not (cetSeriesGeneral in TheHiddenTabs);
  396.       ShowTabMarks:=not (cetSeriesMarks in TheHiddenTabs);
  397.       IsDssGraph:=Self.IsDssGraph;
  398.       TheSeries:=Self.LBSeries.SelectedSeries;
  399.       LBSeries.FillSeries(TheSeries);
  400.       if Assigned(InternalOnCreateEditSeries) then
  401.          InternalOnCreateEditSeries(TheFormSeries,TheChart);
  402.       Show;
  403.     end;
  404.   end;
  405.   TheFormSeries.SetCBSeries;
  406. end;
  407.  
  408. procedure TChartEditForm.MainPageChange(Sender: TObject);
  409. begin
  410.   if MainPage.ActivePage=TabSeries then SetTabSeries;
  411. end;
  412.  
  413. {$IFDEF TEEHELPEDITOR}
  414. procedure TChartEditForm.WMHelp(var Message: TWMHelp);
  415. var Control   : TWinControl;
  416.     ContextID : Integer;
  417. begin
  418.   if biHelp in BorderIcons then
  419.   with Message.HelpInfo^ do
  420.   begin
  421.     if iContextType = HELPINFO_WINDOW then
  422.     begin
  423.       Control := FindControl(hItemHandle);
  424.       while (Control <> nil) and (Control.HelpContext = 0) do
  425.         Control := Control.Parent;
  426.       if Control = nil then Exit;
  427.       ContextID := Control.HelpContext;
  428.       Application.HelpCommand(HELP_CONTEXT, ContextID);
  429.     end;
  430.   end
  431.   else inherited;
  432. end;
  433.  
  434. Procedure TChartEditForm.HelpClick(Sender:TObject);
  435. begin
  436.   Application.HelpCommand(HELP_CONTEXT, HelpContext);
  437. end;
  438. {$ENDIF}
  439.  
  440. procedure TChartEditForm.FormCloseQuery(Sender: TObject;
  441.   var CanClose: Boolean);
  442. begin
  443.   if Assigned(TheFormSeries) then TheFormSeries.Close
  444. end;
  445.  
  446. procedure TChartEditForm.LBSeriesEditSeries(Sender: TChartListBox;
  447.   Index: Integer);
  448. begin
  449.   if LBSeries.ItemIndex<>-1 then
  450.   begin
  451.     MainPage.ActivePage:=TabSeries;
  452.     SetTabSeries;
  453.   end;
  454. end;
  455.  
  456. procedure TChartEditForm.LBSeriesOtherItemsChange(Sender: TObject);
  457. begin
  458.   if Assigned(TheFormSeries) then
  459.      TheFormSeries.CBSeries.ItemIndex:=LBSeries.ItemIndex;
  460. end;
  461.  
  462. procedure TChartEditForm.LBSeriesRefreshButtons(Sender: TObject);
  463. var tmp          : Boolean;
  464.     tmpInherited : Boolean;
  465.     tmpSeries    : TChartSeries;
  466. begin
  467.   tmp:=TheChart.SeriesCount>0;
  468.   if tmp then tmpSeries:=TheChart[LBSeries.ItemIndex]
  469.          else tmpSeries:=nil;
  470.   tmpInherited:=tmp and (csAncestor in tmpSeries.ComponentState);
  471.   BAddSeries.Enabled:=(ceAdd in EditorOptions);
  472.   BDeleteSeries.Enabled:= tmp and
  473.                           (not tmpInherited) and
  474.                           (ceDelete in EditorOptions)
  475.                           {$IFDEF D3}
  476.                           and
  477.                           (not (tssIsTemplate in tmpSeries.Style)) and
  478.                           (not (tssDenyDelete in tmpSeries.Style))
  479.                           {$ENDIF}
  480.                           ;
  481.   BRenameSeries.Enabled:=tmp and (LBSeries.SelCount<2) and (ceTitle in EditorOptions);
  482.   BChangeTypeSeries.Enabled:= tmp and
  483.                               (not tmpInherited) and
  484.                               (ceChange in EditorOptions)
  485.                               {$IFDEF D3}
  486.                               and
  487.                               (not (tssDenyChangeType in tmpSeries.Style))
  488.                               {$ENDIF}
  489.                               ;
  490.   BCloneSeries.Enabled:= tmp and
  491.                          (LBSeries.SelCount<2) and
  492.                          (ceClone in EditorOptions)
  493.                          {$IFDEF D3}
  494.                          and
  495.                          (not (tssIsTemplate in tmpSeries.Style)) and
  496.                          (not (tssDenyClone in tmpSeries.Style))
  497.                          {$ENDIF}
  498.                          ;
  499.  
  500.   if tmp and (LBSeries.SelCount<=1) then
  501.   begin
  502.     BMoveDown.Enabled:=LBSeries.ItemIndex<LBSeries.Items.Count-1;
  503.     BMoveUp.Enabled:=LBSeries.ItemIndex>0;
  504.   end
  505.   else
  506.   begin
  507.     BMoveDown.Enabled:=False;
  508.     BMoveUp.Enabled:=False;
  509.   end;
  510. end;
  511.  
  512. procedure TChartEditForm.BChangeTypeSeriesClick(Sender: TObject);
  513. begin
  514.   LBSeries.ChangeTypeSeries(Self);
  515. end;
  516.  
  517. initialization
  518.   InternalOnCreateEditSeries:=nil;
  519.   RegisterClass(TChartEditForm);
  520. end.
  521.